/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.colegiatura.bc.CronogramaDelegate;
import org.cip.esymons.colegiatura.bc.DetalleCronogramaDelegate;
import org.cip.esymons.colegiatura.be.Cronograma;
import org.cip.esymons.colegiatura.be.Detallecronograma;

/**
 *
 * @author ADMINISTRADOR
 */
public class cronogramaController {

    private CronogramaDelegate delegado;
    private DetalleCronogramaDelegate delegadoDetCronograma;
    private Cronograma cronograma;
    private Detallecronograma detCronograma;
    private String CodCronograma;
    private List listaDetCrono;
    List<Cronograma> listaCronogramas;
  

    public cronogramaController() {

        delegado = new CronogramaDelegate();
        delegadoDetCronograma = new  DetalleCronogramaDelegate();
        cronograma = new Cronograma();
        detCronograma = new Detallecronograma();
        listaCronogramas = new ArrayList<Cronograma>();
        listaCronogramas = null;
        ListaCronograma();
    }

    public List<Cronograma> getListaCronogramas() {
        return listaCronogramas;
    }

    public void setListaCronogramas(List<Cronograma> listaCronogramas) {
        this.listaCronogramas = listaCronogramas;
    }

    public Cronograma getCronograma() {
        return cronograma;
    }

    public void setCronograma(Cronograma cronograma) {
        this.cronograma = cronograma;
    }

    public CronogramaDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(CronogramaDelegate delegado) {
        this.delegado = delegado;
    }

    public String getCodCronograma() {
        return CodCronograma;
    }

    public void setCodCronograma(String CodCronograma) {
        this.CodCronograma = CodCronograma;
    }

    public DetalleCronogramaDelegate getDelegadoDetCronograma() {
        return delegadoDetCronograma;
    }

    public void setDelegadoDetCronograma(DetalleCronogramaDelegate delegadoDetCronograma) {
        this.delegadoDetCronograma = delegadoDetCronograma;
    }

    public Detallecronograma getDetCronograma() {
        return detCronograma;
    }

    public void setDetCronograma(Detallecronograma detCronograma) {
        this.detCronograma = detCronograma;
    }

    public List getListaDetCrono() {
        return listaDetCrono;
    }

    public void setListaDetCrono(List listaDetCrono) {
        this.listaDetCrono = listaDetCrono;
    }

    public Cronograma buscaPorCodigo(Integer codigo){

        return delegado.find(codigo);
    }

    public List<Cronograma> ListaCronograma(){

        listaCronogramas = new ArrayList<Cronograma>();
        return listaCronogramas = delegado.findAll();
    }

    public String nuevo(){

        cronograma = new Cronograma();
        return "ir_a_nuevo";
    }

    public String grabar(){

        Cronograma cronograma2  = new Cronograma();
        if(cronograma.getCroAnio().length()>0){
            cronograma2 = delegado.buscaCronograma(cronograma.getCroAnio());
            
            if(cronograma2!=null){
                mostrarMensaje("Error: ", "Ingrese año de cronograma no repetido", FacesMessage.SEVERITY_ERROR);
                cronograma = new Cronograma();
                return null;
            }else{
                cronograma.setCrofechaRegistro(new Date());
                delegado.create(cronograma);
                cronograma = new Cronograma();
            }
        }else{
            mostrarMensaje("Error: ", "Ingrese año de cronograma", FacesMessage.SEVERITY_ERROR);
            cronograma = new Cronograma();
            return null;
        }
        ListaCronograma();
        return "ir_a_listar";
    }

    public boolean validarCronograma(){
        List<Cronograma> listaCro = delegado.findAll();

           try {
                if (cronograma.getCroAnio() == null ||cronograma.getCroAnio().length() == 0) {
                    mostrarMensaje("Error: ", "Ingrese año de Cronograma", FacesMessage.SEVERITY_ERROR);
                    return true;
                }
                for (int j=0; j < listaCro.size(); j++) {
                    if (cronograma.getCroAnio().compareTo(listaCro.get(j).getCroAnio()) == 0) {
                        mostrarMensaje("Error: ", "Ingrese año de cronograma no repetido", FacesMessage.SEVERITY_ERROR);
                        return true;
                    }
                }
            } catch (Exception e) {
                mostrarMensaje("Error: ", "Ingrese año de cronograma", FacesMessage.SEVERITY_ERROR);
            }

        return false;
    }

    public String editar(){

        delegado.edit(cronograma);
        cronograma = new Cronograma();
        return "ir_a_listar";
    }
    public String mostrarDetalle(){

        return "ver_detalle";
    }

    public String remover(){

        List<Detallecronograma> listaDetalleCronograma = new ArrayList<Detallecronograma>();
        listaDetalleCronograma = delegadoDetCronograma.buscaPorCronograma(cronograma);
        for(Detallecronograma det : listaDetalleCronograma){
            if(det!=null){
               delegadoDetCronograma.remove(det);
            }
        }
        delegado.remove(cronograma);
        cronograma = new Cronograma();
        ListaCronograma();
        return null;
    }

    public SelectItem[] getSelectListaItemCrono(){

      try{
        System.out.println("Ingreso 1");
        SelectItem[] selects = null;
        List<Cronograma> listaCronograma = delegado.findAll();
        selects = new SelectItem[listaCronograma.size()];
        int cont = 0;
        for(Cronograma crono : listaCronograma){

            SelectItem item = new SelectItem(crono, crono.getCroAnio().toString());
            selects[cont] = item;
            cont++;
        }
        return selects;
      }catch(Exception e){
            System.out.println("Ingreso Error");
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen cronogramas");
            selects[0] = item;
            return selects;
      }

    }

    //consultar un cronograma

    public String buscaCronograma(){

        cronograma = delegado.buscaCronograma(CodCronograma);
        CodCronograma = null;
        return null;
    }

    public List<Detallecronograma> ListaDetCronograma(){

         try {
             listaDetCrono = null;
             listaDetCrono = new ArrayList();
             listaDetCrono = delegadoDetCronograma.buscaPorCronograma(cronograma);
             if(listaDetCrono.size()<=0){
                 listaDetCrono = null;
                 mostrarMensaje("INFO: ", "No hay cronograma registrado...", FacesMessage.SEVERITY_INFO);
             }
        } catch (Exception ex) {
            listaDetCrono = null;
        }
         return listaDetCrono;
    }

    public String buscarCronograma(){

        buscaCronograma();
        ListaDetCronograma();
        
        return null;
    }

    public String cancelar(){

        return "ir_a_listar";
    }

//METODO QUE MUESTRA LOS MENSAJES DE EXITO O ERROR.
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }



}
